C++ 单例模式总结与剖析 您所在的位置:网站首页 qt 单例 C++ 单例模式总结与剖析

C++ 单例模式总结与剖析

2024-05-11 09:53| 来源: 网络整理| 查看: 265

目录C++ 单例模式总结与剖析一、什么是单例二、C++单例的实现2.1 基础要点2.2 C++ 实现单例的几种方式2.2.1 有缺陷的懒汉式2.2.2 线程安全、内存安全的懒汉式单例 (智能指针,锁)2.2.3 最推荐的懒汉式单例(magic static )——局部静态变量2.2.4 函数返回引用2.3 单例的模板2.3.1 CRTP 奇异递归模板模式实现2.3.2 不需要在子类声明友元的实现方法2.3.3 函数模板返回引用三、何时应该使用或者不使用单例反对单例的理由参考文章

C++ 单例模式总结与剖析

单例可能是最常用的简单的一种设计模式,实现方法多样,根据不同的需求有不同的写法; 同时单例也有其局限性,因此有很多人是反对使用单例的。本文对C++ 单例的常见写法进行了一个总结, 包括懒汉式、线程安全、单例模板等; 按照从简单到复杂,最终回归简单的的方式循序渐进地介绍,并且对各种实现方法的局限进行了简单的阐述,大量用到了C++ 11的特性如智能指针, magic static,线程锁; 从头到尾理解下来,对于学习和巩固C++语言特性还是很有帮助的。本文的全部代码在 g++ 5.4.0 编译器下编译运行通过,可以在我的github 仓库中找到。

一、什么是单例

单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例; 具体运用场景如:

设备管理器,系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动; 数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取; 二、C++单例的实现 2.1 基础要点 全局只有一个实例:static 特性,同时禁止用户自己声明并定义实例(把构造函数设为 private) 线程安全 禁止赋值和拷贝 用户通过接口获取实例:使用 static 类成员函数 2.2 C++ 实现单例的几种方式 2.2.1 有缺陷的懒汉式

懒汉式(Lazy-Initialization)的方法是直到使用时才实例化对象,也就说直到调用get_instance() 方法的时候才 new 一个单例的对象, 如果不被调用就不会占用内存。

#include // version1: // with problems below: // 1. thread is not safe // 2. memory leak class Singleton{ private: Singleton(){ std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有